package com.mh.web.test;

import com.mh.common.core.domain.BaseResp;
import com.mh.common.core.exception.BaseException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/qubi")
    public BaseResp<User> queryUserById(String id) {

        if (id != null) {
            return BaseResp.success(new User(id,"minhui"));
        }else{
            return BaseResp.error("查询失败");
        }
    }

    @RequestMapping("/add")
    //@Validated注解用于触发对User对象的校验
    //BindingResult对象用于存储校验结果;如果校验失败，错误信息会被封装到BindingResult中
    //@Validated注解组合BindingResult用
    public BaseResp addUser(@Validated User user, BindingResult bindingResult) {
        //从BindingResult中获取所有的字段错误信息
        List<FieldError> fieldErrors = bindingResult.getFieldErrors();

        //如果不为空
        if (!fieldErrors.isEmpty()) {
            //fieldErrors.get(0)获取第一个错误信息,一次只响应一个错误
            //getDefaultMessage()用于获取校验失败时的默认错误信息
            //这个信息通常是在校验注解中定义的message属性值-->@NotNull(message = "ID不能为空")
            return BaseResp.error(fieldErrors.get(0).getDefaultMessage());
        }
        return BaseResp.success("OK");
    }

    @RequestMapping("/testerror")
    public BaseResp testError(User u){
        throw new BaseException("500","测试异常类");
    }
}
